home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / v cisle / robocopy / rktools.exe / RCDATA / CABINET / rktools.msi / drvmgr.vbs < prev    next >
Text File  |  2003-04-18  |  17KB  |  669 lines

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-2003
  4. ' All Rights Reserved
  5. '
  6. ' Abstract:
  7. '
  8. ' drvmgr.vbs - driver script for Windows .NET Server 2003
  9. '
  10. ' Usage:
  11. ' drvmgr [-adl?] [-m model name] [-v Version] [-p Path]
  12. '                [-c Server] [-t Architecture] [-i InfFile]
  13. '
  14. ' Example:
  15. ' drvmgr -d -m "driver" -v "Windows XP and Windows .NET Server 2003" -t Intel
  16. ' drvmgr -l -c \\server
  17. '----------------------------------------------------------------------
  18.  
  19. option explicit
  20.  
  21. '
  22. ' Debugging trace flags, to enable debug output trace message
  23. ' change gDebugFlag to true.
  24. '
  25. const kDebugTrace = 1
  26. const kDebugError = 2
  27. dim gDebugFlag
  28.  
  29. gDebugFlag = false
  30.  
  31. '
  32. ' Messages to be displayed if the scripting host is not cscript
  33. '
  34. const kMessage1 = "Please run this script using CScript."
  35. const kMessage2 = "This can be achieved by"
  36. const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
  37. const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
  38. const kMessage5 = "   using ""CScript //H:CScript //S"" and running the script "
  39. const kMessage6 = "   ""script.vbs arguments""."
  40.  
  41. '
  42. ' Operation action values.
  43. '
  44. const kActionUnknown    = 0
  45. const kActionAdd        = 1
  46. const kActionDel        = 2
  47. const kActionDelAll     = 3
  48. const kActionList       = 4
  49.  
  50. const kErrorSuccess     = 0
  51. const kErrorFailure     = 1
  52.  
  53. '
  54. ' Strings identifying environments
  55. '
  56. const kEnvironmentIntel   = "Windows NT x86"
  57. const kEnvironmentItanium = "Windows IA64"
  58. const kEnvironmentMIPS    = "Windows NT R4000"
  59. const kEnvironmentAlpha   = "Windows NT Alpha_AXP"
  60. const kEnvironmentPowerPC = "Windows NT PowerPC"
  61. const kEnvironmentWindows = "Windows 4.0"
  62. const kEnvironmentUnknown = "unknown"
  63.  
  64. '
  65. ' Strings identifying architectures
  66. '
  67. const kArchIntel   = "Intel"
  68. const kArchItanium = "Itanium"
  69. const kArchMIPS    = "MIPS"
  70. const kArchAlpha   = "Alpha"
  71. const kArchPowerPC = "PowerPC"
  72. const kArchUnknown = "Unknown"
  73.  
  74. '
  75. ' Strings identifying driver versions
  76. ' Change these strings on localized builds
  77. '
  78. const kVersionWindows95 = "Windows 95, Windows 98, and Windows Millennium Edition"
  79. const kVersion_NT31     = "Windows NT 3.1"
  80. const kVersion35x       = "Windows NT 3.5 or 3.51"
  81. const kVersion351       = "Windows NT 3.51"
  82. const kVersion40        = "Windows NT 4.0"
  83. const kVersion50        = "Windows 2000, Windows XP and Windows .NET Server 2003"
  84. const kVersion512       = "Windows XP and Windows .NET Server 2003"
  85.  
  86. main
  87.  
  88. '
  89. ' Main execution starts here
  90. '
  91. sub main
  92.  
  93.     dim iAction
  94.     dim iRetval
  95.     dim strServer
  96.     dim strModel
  97.     dim strPath
  98.     dim strVersion
  99.     dim strArchitecture
  100.     dim strInfFile
  101.  
  102.     '
  103.     ' Abort if the host is not cscript
  104.     '
  105.     if not IsHostCscript() then
  106.  
  107.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  108.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  109.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  110.  
  111.         wscript.quit
  112.  
  113.     end if
  114.  
  115.     iRetval = ParseCommandLine(iAction, strServer, strModel, strPath, strVersion, _
  116.                                strArchitecture, strInfFile)
  117.  
  118.     if iRetval = kErrorSuccess  then
  119.  
  120.         select case iAction
  121.  
  122.             case kActionAdd
  123.                 iRetval = AddDriver(strServer, strModel, strPath, strVersion, _
  124.                                     strArchitecture, strInfFile)
  125.  
  126.             case kActionDel
  127.                 iRetval = DelDriver(strServer, strModel, strVersion, strArchitecture)
  128.  
  129.             case kActionDelAll
  130.                 iRetval = DelAllDrivers(strServer)
  131.  
  132.             case kActionList
  133.                 iRetval = ListDrivers(strServer)
  134.  
  135.             case kActionUnknown
  136.                 Usage(true)
  137.                 exit sub
  138.  
  139.             case else
  140.                 Usage(true)
  141.                 exit sub
  142.  
  143.         end select
  144.  
  145.     end if
  146.  
  147. end sub
  148.  
  149. '
  150. ' Add a driver
  151. '
  152. function AddDriver(strServer, strModel, strPath, strVersion, strArchitecture, strInfFile)
  153.  
  154.     on error resume next
  155.  
  156.     DebugPrint kDebugTrace, "In AddDriver"
  157.  
  158.     dim oMaster
  159.     dim oDriver
  160.     dim iResult
  161.  
  162.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  163.     set oDriver = CreateObject("Driver.Driver.1")
  164.  
  165.     oDriver.ModelName          = strModel
  166.     oDriver.Path               = strPath
  167.     oDriver.DriverArchitecture = strArchitecture
  168.     oDriver.InfFile            = strInfFile
  169.     oDriver.ServerName         = strServer
  170.     odriver.DriverVersion      = strVersion
  171.  
  172.     oMaster.DriverAdd oDriver
  173.  
  174.     if Err.Number = kErrorSuccess then
  175.  
  176.         wscript.echo "Added driver """ & oDriver.ModelName & """"
  177.  
  178.         iResult = kErrorSuccess
  179.  
  180.     else
  181.  
  182.         wscript.echo "Unable to add driver """ & oDriver.ModelName & """, error: 0x" _
  183.                      & Hex(Err.Number) & ". " & Err.Description
  184.  
  185.         iResult = kErrorFailure
  186.  
  187.     end if
  188.  
  189.     AddDriver = iResult
  190.  
  191. end function
  192.  
  193. '
  194. ' Delete a driver
  195. '
  196. function DelDriver(strServer, strModel, strVersion, strArchitecture)
  197.  
  198.     on error resume next
  199.  
  200.     DebugPrint kDebugTrace, "In DelDriver"
  201.  
  202.     dim oMaster
  203.     dim oDriver
  204.     dim iRetval
  205.  
  206.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  207.     set oDriver = CreateObject("Driver.Driver.1")
  208.  
  209.     oDriver.ModelName          = strModel
  210.     oDriver.DriverArchitecture = strArchitecture
  211.     oDriver.ServerName         = strServer
  212.     odriver.DriverVersion      = strVersion
  213.  
  214.     oMaster.DriverDel oDriver
  215.  
  216.     if Err.Number = kErrorSuccess then
  217.  
  218.         wscript.echo "Deleted driver """ & oDriver.ModelName & """"
  219.  
  220.         iRetval = kErrorSuccess
  221.  
  222.     else
  223.  
  224.         wscript.echo "Unable to delete driver """ & oDriver.ModelName  & """, error: 0x" _
  225.                      & Hex(Err.Number) & ". " & Err.Description
  226.  
  227.         iRetval = kErrorFailure
  228.  
  229.     end if
  230.  
  231.     DelDriver = iRetval
  232.  
  233. end function
  234.  
  235. '
  236. ' Delete all drivers
  237. '
  238. function DelAllDrivers(strServer)
  239.  
  240.     on error resume next
  241.  
  242.     DebugPrint kDebugTrace, "In DelAllDrivers"
  243.  
  244.     dim oMaster
  245.     dim oDriver
  246.     dim iResult
  247.     dim iTotal
  248.     dim iTotalDeleted
  249.  
  250.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  251.     set oDriver = CreateObject("Driver.Driver.1")
  252.  
  253.     iTotal = 0
  254.     iTotalDeleted = 0
  255.  
  256.     for each oDriver in oMaster.Drivers(strServer)
  257.  
  258.         if Err.Number = kErrorSuccess then
  259.  
  260.             iTotal = iTotal + 1
  261.  
  262.             wscript.echo
  263.             wscript.echo "Attempting to delete driver: " & oDriver.ModelName
  264.             wscript.echo "               architecture: " & GetArchitecture(oDriver.Environment)
  265.             wscript.echo "                    version: " & GetVersion(oDriver.Version, oDriver.Environment)
  266.             wscript.echo "                from server: " & oDriver.ServerName
  267.  
  268.             oMaster.DriverDel oDriver
  269.  
  270.             if Err.Number = kErrorSuccess then
  271.  
  272.                 wscript.echo "Success: Driver """ & oDriver.ModelName & """ was deleted"
  273.  
  274.                 iTotalDeleted = iTotalDeleted + 1
  275.  
  276.             else
  277.  
  278.                 wscript.echo "Unable to delete driver """ & oDriver.ModelName  & """, error: 0x" _
  279.                              & Hex(Err.Number) & ". " & Err.Description
  280.  
  281.                 Err.Clear
  282.  
  283.             end if
  284.  
  285.          else
  286.  
  287.              wscript.echo "Unable to delete drivers on server, error: 0x" & _
  288.                           Hex(Err.Number) & ". " &  Err.Description
  289.  
  290.              DelAllDrivers = kErrorFailure
  291.  
  292.              exit function
  293.  
  294.          end if
  295.  
  296.     next
  297.  
  298.     wscript.echo "Number of drivers " & iTotal & ". Drivers deleted " & iTotalDeleted
  299.  
  300.     DelAllDrivers = kErrorSuccess
  301.  
  302. end function
  303.  
  304. '
  305. ' List drivers
  306. '
  307. function ListDrivers(strServer)
  308.  
  309.     on error resume next
  310.  
  311.     DebugPrint kDebugTrace, "In ListDriver"
  312.  
  313.     dim oMaster
  314.     dim oDriver
  315.     dim iResult
  316.     dim iTotal
  317.     dim vntDependentFiles
  318.  
  319.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  320.  
  321.     for each oDriver in oMaster.Drivers(strServer)
  322.  
  323.         if Err.Number = kErrorSuccess then
  324.  
  325.             wscript.echo ""
  326.             wscript.echo "ServerName    : " & oDriver.ServerName
  327.             wscript.echo "DriverName    : " & oDriver.ModelName
  328.             wscript.echo "Version       : " & oDriver.Version
  329.             wscript.echo "DriverVersion : " & GetVersion(oDriver.Version, oDriver.Environment)
  330.             wscript.echo "DriverPath    : " & oDriver.Path
  331.             wscript.echo "Environment   : " & oDriver.Environment
  332.             wscript.echo "Architecture  : " & GetArchitecture(oDriver.Environment)
  333.             wscript.echo "MonitorName   : " & oDriver.MonitorName
  334.             wscript.echo "DataFile      : " & oDriver.DataFile
  335.             wscript.echo "ConfigFile    : " & oDriver.ConfigFile
  336.             wscript.echo "HelpFile      : " & oDriver.HelpFile
  337.  
  338.             vntDependentFiles = oDriver.DependentFiles
  339.  
  340.             '
  341.             ' If there are no dependent files, the method will set DependentFiles to
  342.             ' an empty variant, so we check if the variant is an array of variants
  343.             '
  344.             if VarType(vntDependentFiles) = (vbArray + vbVariant) then
  345.  
  346.                 PrintDepFiles oDriver.DependentFiles
  347.  
  348.             end if
  349.  
  350.             Err.Clear
  351.  
  352.         else
  353.  
  354.             wscript.echo "Unable to list drivers, error: 0x" & Hex(Err.Number) & _
  355.                          ". " & Err.Description
  356.  
  357.             ListDrivers = iErrorFailure
  358.  
  359.             exit function
  360.  
  361.         end if
  362.  
  363.     next
  364.  
  365.     wscript.echo "Success listing drivers"
  366.  
  367.     ListDrivers = kErrorSuccess
  368.  
  369. end function
  370.  
  371. '
  372. ' Prints the contents of an array of variants
  373. '
  374. sub PrintDepFiles(Param)
  375.  
  376.    on error resume next
  377.  
  378.    dim iIndex
  379.  
  380.    iIndex = LBound(Param)
  381.  
  382.    if Err.Number = 0 then
  383.  
  384.       wscript.echo "Dependent Files "
  385.  
  386.       for iIndex = LBound(Param) to UBound(Param)
  387.  
  388.           wscript.echo "                " & Param(iIndex)
  389.  
  390.       next
  391.  
  392.    else
  393.  
  394.         wscript.echo "Unable to print the dependent files, error 0x" & _
  395.                      Hex(Err.Number ) & ". " & Err.Description
  396.  
  397.    end if
  398.  
  399. end sub
  400.  
  401. '
  402. ' Debug display helper function
  403. '
  404. sub DebugPrint(uFlags, strString)
  405.  
  406.     if gDebugFlag = true then
  407.  
  408.         if uFlags = kDebugTrace then
  409.  
  410.             wscript.echo "Debug: " & strString
  411.  
  412.         end if
  413.  
  414.         if uFlags = kDebugError then
  415.  
  416.             if Err <> 0 then
  417.  
  418.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  419.  
  420.             end if
  421.  
  422.         end if
  423.  
  424.     end if
  425.  
  426. end sub
  427.  
  428. '
  429. ' Parse the command line into it's components
  430. '
  431. function ParseCommandLine(iAction, strServer, strModel, strPath, strVersion, strArchitecture, strInfFile)
  432.  
  433.     on error resume next
  434.  
  435.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  436.  
  437.     dim oArgs
  438.     dim iIndex
  439.  
  440.     iAction = kActionUnknown
  441.     iIndex = 0
  442.  
  443.     set oArgs = wscript.Arguments
  444.  
  445.     while iIndex < oArgs.Count
  446.  
  447.         select case oArgs(iIndex)
  448.  
  449.             case "-a"
  450.                 iAction = kActionAdd
  451.  
  452.             case "-d"
  453.                 iAction = kActionDel
  454.  
  455.             case "-l"
  456.                 iAction = kActionList
  457.  
  458.             case "-x"
  459.                 iAction = kActionDelAll
  460.  
  461.             case "-c"
  462.                 iIndex = iIndex + 1
  463.                 strServer = oArgs(iIndex)
  464.  
  465.             case "-m"
  466.                 iIndex = iIndex + 1
  467.                 strModel = oArgs(iIndex)
  468.  
  469.             case "-p"
  470.                 iIndex = iIndex + 1
  471.                 strPath = oArgs(iIndex)
  472.  
  473.             case "-v"
  474.                 iIndex = iIndex + 1
  475.                 strVersion = oArgs(iIndex)
  476.  
  477.             case "-t"
  478.                 iIndex = iIndex + 1
  479.                 strArchitecture = oArgs(iIndex)
  480.  
  481.             case "-i"
  482.                 iIndex = iIndex + 1
  483.                 strInfFile = oArgs(iIndex)
  484.  
  485.             case "-?"
  486.                 Usage(true)
  487.                 exit function
  488.  
  489.             case else
  490.                 Usage(true)
  491.                 exit function
  492.  
  493.         end select
  494.  
  495.         iIndex = iIndex + 1
  496.  
  497.     wend
  498.  
  499.     if Err.Number <> 0 then
  500.  
  501.         wscript.echo "Unable to parse command line, error 0x" & _
  502.                      Hex(Err.Number) & ". " & Err.Description
  503.  
  504.         ParseCommandLine = kErrorFailure
  505.  
  506.     else
  507.  
  508.         ParseCommandLine = kErrorSuccess
  509.  
  510.     end if
  511.  
  512. end  function
  513.  
  514. '
  515. ' Display command usage.
  516. '
  517. sub Usage(bExit)
  518.  
  519.     wscript.echo "Usage: drvmgr [-adlx?] [-m model] [-v version] [-p path]"
  520.     wscript.echo "                       [-c server] [-t architecture] [-i inf file]"
  521.     wscript.echo "Arguments:"
  522.     wscript.echo "-a     - add the specified driver"
  523.     wscript.echo "-c     - server name"
  524.     wscript.echo "-d     - delete the specified driver"
  525.     wscript.echo "-i     - inf file name"
  526.     wscript.echo "-l     - list all drivers"
  527.     wscript.echo "-m     - driver model name"
  528.     wscript.echo "-p     - driver file path"
  529.     wscript.echo "-t     - architecture"
  530.     wscript.echo "-v     - version"
  531.     wscript.echo "-x     - delete all drivers that are not in use"
  532.     wscript.echo "-?     - display command usage"
  533.     wscript.echo ""
  534.     wscript.echo "Examples:"
  535.     wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows 2000, Windows XP and Windows .NET Server 2003"""
  536.     wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows NT 4.0 or 2000"
  537.     wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows 95, Windows 98, and Windows Millennium Edition"" -p c:\drv\win9x"
  538.     wscript.echo "drvmgr -a -m ""driver"" -t Itanium -v ""Windows XP and Windows .NET Server 2003"""
  539.     wscript.echo "drvmgr -d -m ""driver"" -v ""Windows 2000, Windows XP and Windows .NET Server 2003"" -t Intel"
  540.     wscript.echo "drvmgr -l -c \\server"
  541.     wscript.echo "drvmgr -x -c \\server"
  542.  
  543.     if bExit then
  544.  
  545.         wscript.quit(1)
  546.  
  547.     end if
  548.  
  549. end sub
  550.  
  551. '
  552. ' Determines which program is used to run this script.
  553. ' Returns true if the script host is cscript.exe
  554. '
  555. function IsHostCscript()
  556.  
  557.     on error resume next
  558.  
  559.     dim strFullName
  560.     dim strCommand
  561.     dim i, j
  562.     dim bReturn
  563.  
  564.     bReturn = false
  565.  
  566.     strFullName = WScript.FullName
  567.  
  568.     i = InStr(1, strFullName, ".exe", 1)
  569.  
  570.     if i <> 0 then
  571.  
  572.         j = InStrRev(strFullName, "\", i, 1)
  573.  
  574.         if j <> 0 then
  575.  
  576.             strCommand = Mid(strFullName, j+1, i-j-1)
  577.  
  578.             if LCase(strCommand) = "cscript" then
  579.  
  580.                 bReturn = true
  581.  
  582.             end if
  583.  
  584.         end if
  585.  
  586.     end if
  587.  
  588.     if Err <> 0 then
  589.  
  590.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  591.                           & ". " & vbCRLF & "The scripting host could not be determined.")
  592.  
  593.     end if
  594.  
  595.     IsHostCscript = bReturn
  596.  
  597. end function
  598.  
  599. '
  600. ' Converts a driver environment string to a string
  601. ' representing the architecture of the driver.
  602. '
  603. function GetArchitecture(strEnvironment)
  604.  
  605.     dim strArchitecture
  606.  
  607.     if strEnvironment = kEnvironmentIntel then
  608.         strArchitecture = kArchIntel
  609.     elseif strEnvironment = kEnvironmentMIPS then
  610.         strArchitecture = kArchMIPS
  611.     elseif strEnvironment = kEnvironmentAlpha then
  612.         strArchitecture = kArchAlpha
  613.     elseif strEnvironment = kEnvironmentPowerPC then
  614.         strArchitecture = kArchPowerPC
  615.     elseif strEnvironment = kEnvironmentWindows then
  616.         strArchitecture = kArchIntel
  617.     elseif strEnvironment = kEnvironmentItanium then
  618.         strArchitecture = kArchItanium
  619.     else
  620.         strArchitecture = kArchUnknown
  621.     end if
  622.  
  623.     GetArchitecture = strArchitecture
  624.  
  625. end function
  626.  
  627. '
  628. ' Converts a driver environment string and a number to
  629. ' a string representing the driver version
  630. '
  631. function GetVersion(uVersion, strEnvironment)
  632.  
  633.     dim strVersion
  634.  
  635.     select case uVersion
  636.     case 0:
  637.         if strEnvironment = kEnvironmentWindows then
  638.             strVersion = kVersionWindows95
  639.         else
  640.             strVersion = kVersionNT31
  641.  
  642.         end if
  643.  
  644.     case 1:
  645.         if strEnvironment = kEnvironmentPowerPC then
  646.             strVersion = kVersion351
  647.         else
  648.             strVersion = kVersion35x
  649.         end if
  650.  
  651.     case 2:
  652.         strVersion = kVersion40
  653.  
  654.     case 3:
  655.         if strEnvironment = kEnvironmentItanium then
  656.             strVersion = kVersion512
  657.         else
  658.             strVersion = kVersion50
  659.         end if
  660.  
  661.     case else:
  662.         strVersion = kArchUnknown
  663.  
  664.     end select
  665.  
  666.     GetVersion = strVersion
  667.  
  668. end function
  669.